package com.chaike.hsq.bean.request.pay;

import com.chaike.hsq.bean.request.BaseHsqRequest;
import com.chaike.hsq.bean.response.pay.RefundResponse;
import com.chaike.hsq.consts.HsqPayEnum;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * 慧收钱 退款 业务请求参数.
 * 文档地址：https://docs.huishouqian.com/HSQ_copy/HSQ-AppletPayAPI-TransRefundAPI-1_copy.html
 *
 * @author Luo
 * @version 1.0
 * @date 2021-10-14 10:36
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RefundRequest extends BaseHsqRequest<RefundResponse> implements Serializable {

    private static final long serialVersionUID = -6811550517417623460L;

    /**
     * <pre>
     * 字段名：商户订单号.
     * 变量名：transNo
     * 是否必填：是
     * 类型：string[1,64]
     * 描述：
     *    退款请求商户订单号，唯一不重复
     * </pre>
     */
    private String transNo;

    /**
     * <pre>
     * 字段名：退款类型.
     * 变量名：refundType
     * 是否必填：是
     * 类型：string[1,10]
     * 描述：
     *    类型：1
     * </pre>
     */
    private String refundType = "1";

    /**
     * <pre>
     * 字段名：原商户订单号.
     * 变量名：origTransNo
     * 是否必填：是
     * 类型：string[1,64]
     * 描述：
     *    原支付交易对应的商户订单号
     * </pre>
     */
    private String origTransNo;

    /**
     * <pre>
     * 字段名：原订单金额.
     * 变量名：origOrderAmt
     * 是否必填：是
     * 类型：string[1,16]
     * 描述：
     *    原支付交易的订单总金额，单位：分
     * 示例：1 表示 1 分
     * </pre>
     */
    private String origOrderAmt;

    /**
     * <pre>
     * 字段名：退款金额.
     * 变量名：orderAmt
     * 是否必填：是
     * 类型：string[1,16]
     * 描述：
     *    退款金额，累计退款交易不能超过原订单支付金额，单位：分
     * </pre>
     */
    private String orderAmt;

    /**
     * <pre>
     * 字段名：交易时间.
     * 变量名：requestDate
     * 是否必填：是
     * 类型：string[1,16]
     * 描述：
     *    请求时间，与当前系统时间相差小于10分钟，格式[yyyyMMddHHmmss]
     * 示例值：20190101140908
     * </pre>
     */
    private String requestDate;

    /**
     * <pre>
     * 字段名：退款原因.
     * 变量名：refundReason
     * 是否必填：是
     * 类型：string[1,128]
     * 描述：
     *    退款原因
     * 示例：商品已售完
     * </pre>
     */
    private String refundReason;

    /**
     * <pre>
     * 字段名：后端通知地址.
     * 变量名：returnUrl
     * 是否必填：否
     * 类型：string[1,128]
     * 描述：
     *    当退款有结果时，慧收钱主动通知商户的地址
     * 示例值：https://www.merchant.com/xxx
     * </pre>
     */
    private String returnUrl;

    /**
     * <pre>
     * 字段名：附加字段.
     * 变量名：extend
     * 是否必填：否
     * 类型：string[1,128]
     * 描述：
     *    附加数据，原样返回，可作为自定义参数使用
     * </pre>
     */
    private String extend;

    /**
     * 获取请求方法的名称.
     *
     * @return 方法名称
     */
    @Override
    public String getMethodName() {
        return HsqPayEnum.Method.POLYMERIZE_REFUND.getName();
    }

}
